CS 6670 Project 1 Report

Shuo Chen

sc2247@cornell.edu

·         My Feature Descriptor

I finally use the simplified SIFT descriptor as described in the slides. The details are

1.       Take a 17×17 window around the feature pixel. Rotate it according to the feature’s radian angle, which is the direction of the eigenvector that corresponds the largest eigenvalue of Harris matrix. Then take the 17×17 image patch.

2.       Use a 5×5 Gaussian window to filter the patch.

3.       Divide the patch to 16 4×4 subpatches (the last row and column are left over).

4.       For each of the subpatch, calculate its gradient directions. Form an 8-bin histogram to store the distribution of those directions. Each bin covers a range of π/4.

5.       Use all the 16 histogram to describe feature.

        This function is named as ComputeMySIFTDescriptors in my code. I also tried some other descriptor. In the function ComputeCustomDescriptors, I take a patch around the feature point, and calculate the histogram of the intensity of the pixels as the descriptor. But it turns out that the ROC curves are even worse than the simplified MOPS descriptor. So I choose to use the simplified SIFT descriptor as my custom descriptor.

·         Reason for Choosing the Descriptor

It is because it is the best among what I have tried. Also it is position, rotation and illumination invariant.

·         Performances

ROC Curves on graf

Method

AUC

Simple + SSD

0.673933

Simple + ratio test

0.700792

MOPS + SSD

0.862090

MOPS + ratio test

0.885447

Custom + SSD

0.893027

Custom + ratio test

0.893922

AUC on graf

harris.png

Harris Image for graf

 

ROC Curves on yosemite

Method

AUC

Simple + SSD

0.870404

Simple + ratio test

0.905507

MOPS + SSD

0.904376

MOPS + ratio test

0.938999

Custom + SSD

0.943664

Custom + ratio test

0.954800

AUC on yosemite

Harris Image for Yosemite

 

The results on the benchmark datasets are as following.

Average AUC

Simple

MOPS

Custom

SSD

0.513035

0.633960

0.597734

ratio test

0.559956

0.601178

0.599634

Average AUC on Benchmark graf

 

Average AUC

Simple

MOPS

Custom

SSD

0.307815

0.626546

0.679888

ratio test

0.525774

0.654188

0.671289

Average AUC on Benchmark leuven

 

Average AUC

Simple

MOPS

Custom

SSD

0.295870

0.636941

0.649956

ratio test

0.480931

0.641228

0.606301

Average AUC on Benchmark bikes

 

Average AUC

Simple

MOPS

Custom

SSD

0.308886

0.659596

0.635926

ratio test

0.541637

0.641010

0.624412

Average AUC on Benchmark wall

 

·         Strength and Weakness

One can see from the ROC curves that my custom descriptor generally outperforms the MOPS descriptor for the simple cases, where the transformation between images is comparatively slight. However, when there is a huge change of view angle (graf), illumination (leuven), blurring (bikes) or a large amount of ambiguous matching, the performances of both MOPS and my custom descriptor drop drastically. For some cases, my descriptor is no longer better that MOPS.  This suggests that the descriptors are not so robust against these changes.

 

·         Some matching results on the pictures I took

We used our custom descriptor for the following images.

It seems that the feature descriptor works pretty well when the view point doesn’t change very drastically.  

However, if we change the view point from one side of the building to the other side, the descriptor is no longer reliable.

And it is not scale invariant.